package sistema.contexto.problemas;

import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import facade.excecoes.ValidacaoException;

/**
 * Classe que contem todos os problemas j� criados
 * @author Thiago Emmanuel Pereira da Cunha Silva, thiago.manel@gmail.com
 * @author Joao Arthur Brunet Monteiro, joaoarthurbm@gmail.com
 * @author Vin�cius Ferraz Campos, vinicius.ferraz_at_gmail.com
 *
 */
public class BaseProblemas {

	private Map<String, ProblemaIF> problemas;
	
	/**
	 * Construtor
	 *
	 */
	public BaseProblemas() {
		problemas = new HashMap<String, ProblemaIF>();
	}
	
	/**
	 * Cadastra um novo problema a base
	 * @param idProblema Identificador do Problema
	 * @param descricao Descricao do Problema
	 * @param pathEntrada Caminho onde est� o arquivo de entrada para verificar corretura
	 * @param pathSaida Caminho onde est� o arquivo de sa�da esperada para verificar corretura
	 */
	public void cadastraProblema(String idProblema, String descricao, String idLinguagem, String idValidador, String pathEntrada, String pathSaida) {
		if (this.containsProblema(idProblema)) throw new IllegalArgumentException(ValidacaoException.JAH_EXISTE_PROBLEMA);
		
		problemas.put(idProblema, new Problema(idProblema, descricao,idLinguagem, idValidador, pathEntrada, pathSaida));
	}

	private boolean containsProblema( String idProblema ) {
		return this.problemas.containsKey(idProblema);
	}

	/**
	 * Retorna um Problema
	 * @param idProblema Identificador do Problema
	 * @return Problema
	 */
	public ProblemaIF getProblema(String idProblema) {
		return problemas.get(idProblema);
	}

	public Collection<ProblemaIF> getProblemas() {
		return Collections.unmodifiableCollection(problemas.values());
	}
}
